package es.ise.core.aspects;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;

/**
 * Este aspecto renombra dinámicamente el nombre lógico de la vista devuelta por
 * todos aquellos métodos de controladores (que no sean de AJAX), anteponiendo
 * "core/" o "project/" al nombre de la vista dependiendo de si el método
 * está en un controller que forma parte del core o si forma parte de los propios
 * del proyecto
 *   
 * @author Paco
 */
@Component
@Aspect
public class JspLocationAspects
{
	/**
	 * Renombra la vista devuelta por todos los controladores del core
	 * @param mav El <code>ModelAndView</code> devuelto por el método
	 */
	@AfterReturning(pointcut = "Pointcuts.controllerMethod() && !Pointcuts.ajaxControllerMethod() && Pointcuts.coreMethod()", returning = "mav")
	public void coreJsp(ModelAndView mav)
	{
		String viewName = mav.getViewName();
		if (!viewName.startsWith("redirect:"))
		{
			mav.setViewName("core/" + viewName);
		}
	}

	/**
	 * Renombra la vista devuelta por todos los controladores propios del proyecto
	 * @param mav El <code>ModelAndView</code> devuelto por el método
	 */
	@AfterReturning(pointcut = "Pointcuts.controllerMethod() && !Pointcuts.ajaxControllerMethod() && !Pointcuts.coreMethod()", returning = "mav")
	public void projectJsp(ModelAndView mav)
	{
		String viewName = mav.getViewName();
		if (!viewName.startsWith("redirect:"))
		{
			mav.setViewName("project/" + viewName);
		}
	}
}
